home *** CD-ROM | disk | FTP | other *** search
/ ETO Development Tools 4 / ETO Development Tools 4.iso / Essentials / C++ A'Link Files / 1989 / 0003-RE C++ Stand Alone C-Nov89 < prev    next >
Text File  |  1991-03-06  |  1KB  |  46 lines

  1. Item forwarded  by  CPLUS.ADMIN  to CP.ARCHIVES
  2.  
  3. Item    0888993                         21-Nov-89        10:40
  4.  
  5. From:   PALEVICH1                       Palevich, John
  6.  
  7. To:     CPLUS.APPLE$                    C++ Interest List--Apple Employees
  8.  
  9. Sub:    RE: C++ Stand Alone Code
  10.  
  11. If you want virtual functions in stand alone C++ code, it is possible to have
  12. them.  The problem is that the MPW run time global data initialization code
  13. isn't able to initialize global variables to point to addresses of functions.
  14. Instead it tries to point at A5-relative offsets, which only apply to CODE
  15. segments.
  16.  
  17. There are several ways around this problem:
  18.  
  19.  1) Don't use virtual functions.
  20.  2) Ask the MPW guys to enhance the data initialization code (would require
  21. changes to the linker and the C run time library.)
  22.  3) Edit the output of CFront to initialize the virtual function tables using C
  23. code at run time.
  24.  
  25. I myself have used option 1, but if I were gung-ho, I would use StreamEdit
  26. scripts to edit the output of CFront, and turn phrases like this:
  27.  
  28. void* TFoo_vtable[10] = { _dt_TFoo, TFoo_A, TFoo_B ... };
  29.  
  30. into something like this:
  31.  
  32. void* TFoo_vtable[10];
  33.  
  34. TFooInit() {
  35.     TFoo_vtable[0] = _dt_TFoo;
  36.     TFoo_vtable[1] = TFoo_A;
  37.     TFoo_vtable[2] = TFoo_B;
  38.     ... etc ...
  39.     }
  40.  
  41. Then my main() module would have to call TFooInit() before using TFoo objects.
  42.  
  43. Jack Palevich
  44.  
  45.  
  46.